package hashtable.isangram;

/**
 * 题目:
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的 字母异位词。
   示例 1:
   输入: s = "anagram", t = "nagaram"
   输出: true
 * 字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语，并使用所有原字母一次。

 * 知识点:
 * 获取String的s的长度用s.length()方法
 * 获取String的s的某个字符用s.charAt(i)方法
 */

public class IsAnagram {
    public boolean isAnagram(String s, String t) {
        //用数组实现hash法
        //只有26个字母，所以大小用26
        int[] hash=new int [26];
        //统计字符串的长度，直接使用 String.length() 方法即可
        for(int i=0;i<s.length();i++){
            //因为字符a到字符z的ASCII是26个连续的数值，所以字符a映射为下标0，相应的字符z映射为下标25。
            hash[s.charAt(i)-'a']++;//相对位置从0开始
        }

        //遍历字符串t的时候，对t中出现的字符映射哈希表索引上的数值再做-1的操作
        for(int j=0;j<t.length();j++){
            hash[t.charAt(j)-'a']--;
        }

        for(int k=0;k<26;k++){
            //record数组如果有的元素不为零0，说明字符串s和t一定是谁多了字符或者谁少了字符，return false。
            if(hash[k]!=0){
                return false;
            }
        }
        return true;
    }
}